package deepr.lib;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * Spring ApplicationContext 工具类
 */
@SuppressWarnings("unchecked")
@Component
public class SpringUtils implements ApplicationContextAware {

  private static ApplicationContext applicationContext;

  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    SpringUtils.applicationContext = applicationContext;
  }

  public static <T> T getBean(String beanName) {
    if (applicationContext.containsBean(beanName)) {
      return (T) applicationContext.getBean(beanName);
    } else {
      return null;
    }
  }
  public static <T> T getBean(Class<T> czz) {
    return applicationContext.getBean(czz);
  }

  public static <T> Map<String, T> getBeansOfType(Class<T> baseType) {
    return applicationContext.getBeansOfType(baseType);
  }
}
